#include <iostream>
#include <string>

// 成员属性设置为私有
// 1. 封装性更好，防止外部直接访问和修改成员属性
// 2. 可以通过公共的成员函数来控制对成员属性的访问和修改

class Person
{
public:
    // 设置姓名
    void setName(std::string name)
    {
        m_Name = name;
    }
    // 获取姓名
    std::string getName()
    {
        return m_Name;
    }

    void setAge(int age)
    {
        if (age < 0 || age > 150)
        {
            std::cout << "age must be in range 0-150" << std::endl;
            return;
        }
        m_Age = age;
    }

    int getAge()
    {
        return m_Age;
    }

    void setIdol(std::string idol)
    {
        m_Idol = idol;
    }
private:
    std::string m_Name; // 姓名 可读可写
    int m_Age = 18;          // 年龄 只读 可写但是要在指定范围的年龄0-150
    std::string m_Idol; // 偶像 只写
};

int main()
{
    Person p;
    p.setName("Jack");
    std::cout << "name:" << p.getName() << std::endl;
    std::cout << "age:" << p.getAge() << std::endl;
    p.setIdol("Drake");
    // std::cout << "idol:" << p.m_Idol << std::endl;
    return 0;    
}